From: Owen W. Taylor Date: Fri, 18 Feb 2011 15:31:18 +0000 (-0500) Subject: Be more careful with workspace thumbnail scale X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8958 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ef983480c0e5b7a59731462a48e73aa53bb860aa;p=gnome-shell.git Be more careful with workspace thumbnail scale - When tweening a workspace to collapse it, round the multiplied height so that we don't change other workspace sizes via rounding differences. - Use separate horizontal and vertical scales, so that every thumbnail has the same horizontal scale. https://bugzilla.gnome.org/show_bug.cgi?id=641881 --- diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index d86f01999..f555bba4e 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -714,6 +714,7 @@ ThumbnailsBox.prototype = { let thumbnailHeight = portholeHeight * this._scale; let thumbnailWidth = Math.round(portholeWidth * this._scale); + let roundedHScale = thumbnailWidth / portholeWidth; let slideOffset; // X offset when thumbnail is fully slid offscreen if (rtl) @@ -746,7 +747,7 @@ ThumbnailsBox.prototype = { let thumbnail = this._thumbnails[i]; if (i > 0) - y += (1 - thumbnail.collapseFraction) * spacing; + y += spacing - Math.round(thumbnail.collapseFraction * spacing); // We might end up with thumbnailHeight being something like 99.33 // pixels. To make this work and not end up with a gap at the bottom, @@ -754,7 +755,7 @@ ThumbnailsBox.prototype = { // we compute an actual scale separately for each thumbnail. let y1 = Math.round(y); let y2 = Math.round(y + thumbnailHeight); - let roundedScale = (y2 - y1) / portholeHeight; + let roundedVScale = (y2 - y1) / portholeHeight; let x1, x2; if (rtl) { @@ -775,10 +776,13 @@ ThumbnailsBox.prototype = { childBox.y1 = y1; childBox.y2 = y1 + portholeHeight; - thumbnail.actor.set_scale(roundedScale, roundedScale); + thumbnail.actor.set_scale(roundedHScale, roundedVScale); thumbnail.actor.allocate(childBox, flags); - y += thumbnailHeight * (1 - thumbnail.collapseFraction); + // We round the collapsing portion so that we don't get thumbnails resizing + // during an animation due to differences in rounded, but leave the uncollapsed + // portion unrounded so that non-animating we end up with the right total + y += thumbnailHeight - Math.round(thumbnailHeight * thumbnail.collapseFraction); } if (rtl) {